﻿Dawn.Regular = {
    /*----------------------------------------------------------
    ----    电子邮件
    ----------------------------------------------------------*/
    //判断字符串是否符合Email格式
    IsEmail: /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/,
    //判断字符串是否符合Email格式
    IsEmailValid: /^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(([0-9]{1,3})|([a-zA-Z]{2,4})|(aero|coop|info|museum|name))$/,
    /*----------------------------------------------------------
    ----    中文验证
    ----------------------------------------------------------*/
    //判断字符串是否为真实姓名，2-4个中文
    ChsIsTname: /^[\u4E00-\u9FA5]{2,4}$/,
    //判断字符串是否由中文组成
    ChsIsChinese: /^[\u4E00-\u9FA5]+$/,
    //判断字符串是否由中文、英文、数字组成
    ChsIsChineseOrEngOrNum: /^[a-zA-Z0-9\u4E00-\u9FA5]+$/,
    //判断字符串是否由中文、英文、数字组成，中文或英文开头
    ChsIsChineseOrEngOrNums: /^[a-zA-Z\u4e00-\u9fa5]+([a-zA-Z0-9\u4E00-\u9FA5]{0,}$)/,
    //判断字符串是否由中文、字母、数字组成，可含标点符号()[]（）
    ChsIsText: /^[0-9a-zA-Z\u4E00-\u9FA5()\[\]（）《》]+$/,
    //判断字符串是否由中文、字母、数字组成，可含标点符号()[]（），中文或英文开头
    ChsIsTexts: /^[a-zA-Z\u4E00-\u9FA5]+([0-9a-zA-Z\u4E00-\u9FA5()\[\]（）《》]{0,}$)/,
    //判断字符串是否由中文、字母、数字组成，可含标点符号()[]（）：:、，,。.；;！!……，含换行符及回车符
    ChsIsMemo: /^[0-9a-zA-Z\u4E00-\u9FA5()\[\]（）《》：:、，,。.；;！!……\n\r]+$/,
    //判断字符串是否由中文、字母、数字组成，可含标点符号()[]（）：:、，,。.；;！!……，含换行符及回车符，中文或英文开头
    ChsIsMemos: /^[a-zA-Z\u4E00-\u9FA5]+([0-9a-zA-Z\u4E00-\u9FA5()\[\]（）《》：:、，,。.；;！!……\n\r]{0,}$)/,
    //判断字符串是否由中文、字母、数字组成，可含标点符号()[-]（、），中文或英文开头
    ChsIsAddress: /^[a-zA-Z\u4E00-\u9FA5]+([0-9a-zA-Z\u4E00-\u9FA5()\[\-\]（、）《》]{0,}$)/,
    /*----------------------------------------------------------
    ----    英文验证
    ----------------------------------------------------------*/
    //判断字符串是否符合密码规范，任意字符，长度：6-16 [区分大小写]
    EngIsPwd: /(.){6,16}$/,
    //判断字符串是否符合密码规范，任意字符，长度：6-16 [区分大小写]，英文开头
    EngIsPassword: /^[a-zA-Z]{1}(.){5,15}$/,
    //判断字符串是否符合密码规范，由英文和数字及下划线组成，长度：6-16 [区分大小写]，英文开头
    EngIsPasswords: /^[a-zA-Z]{1}(\w){5,15}$/,
    //判断字符串是否由英文和数字组成，用于检测注册帐号是否符合规范用，长度：4-8 [不区分大小写]，英文开头
    EngIsRegister: /^[a-zA-Z]{1}([a-zA-Z0-9]){3,7}$/,
    //判断字符串是否由英文和数字组成，用于检测注册帐号是否符合规范用，长度：4-16 [不区分大小写]，英文开头
    EngIsRegisters: /^[a-zA-Z]{1}([a-zA-Z0-9]){3,15}$/,
    //判断字符串是否由26个英文字母组成，不区分大小写
    EngIsEnglish: /^[A-Za-z]+$/,
    //判断字符串是否由26个英文大写字母组成
    EngIsUppercase: /^[A-Z]+$/,
    //判断字符串是否由26个英文小写字母组成
    EngIsLowercase: /^[a-z]+$/,
    //判断字符串是否由26个英文和数字组成
    EngIsEngAndNum: /^[A-Za-z0-9]+$/,
    //判断字符串是否由26个英文和数字组成，英文开头
    EngIsEngAndNums: /^[a-zA-Z]+([a-zA-Z0-9]{0,}$)/,
    //判断字符串是否由26个英文、数字及逗号组成，英文开头
    EngIsEngAndNumComma: /^[a-zA-Z]+([0-9a-zA-Z,]{0,}$)/,
    //判断字符串是否由26个英文和数字及下划线组成
    EngIsEngAndNumOrUnderline: /^\w+$/,
    /*----------------------------------------------------------
    ----    数字验证
    ----------------------------------------------------------*/
    //判断对象是否为0-255数据
    NumIsByteTinyint: /((^[0-9]{1,2})|(^[1][0-9]{1,2})|(^[2][0-5][0-5]))$/,
    //判断对象是否由数字组成
    NumIsInteger: /^[-\+]?\d+$/,
    //判断对象是否为零和非零开头的数字
    NumIsZeroOrNot: /^(0|[1-9][0-9]*)$/,
    //判断对象是否为2位小数的正实数
    NumIsPlus2Point: /^[0-9]+(.[0-9]{2})?$/,
    //判断对象是否为1至3位小数的正实数
    NumIsPlus3Point: /^[0-9]+(.[0-9]{1,3})?$/,
    //判断对象是否为非零的正整数
    NumIsIntegralBySignless: /^\+?[1-9][0-9]*$/,
    //判断对象是否为非零的负整数
    NumIsIntegralByNegative: /^\-[1-9][0-9]*$/,
    //判断对象是否为正浮点数
    NumIsFloatBySignless: /^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/,
    //判断对象是否为负浮点数
    NumIsFloatByNegative: /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/,
    //判断对象是否为Double类型
    NumIsDouble: /^([0-9])[0-9]*(\.\w*)?$/,
    //判断对象是否为Double类型，包含正负号
    NumIsDoubles: /^[-\+]?\d+(\.\d+)?$/,
    //判断对象是否为Money类型
    NumIsMoney: /^(([1-9]\d*)|(([0-9]{1}|[1-9]+)\.[0-9]{1,2}))$/,
    /*----------------------------------------------------------
    ----    电话号码
    ----------------------------------------------------------*/	
	//判断字符串是否符合任意手机号码格式
	//(+000086|000086)(-)(0000)(-)12345678(-)(1234)
    TelIsTelephoneAny: /^(\+([0-9]{1,6})|([0-9]{1,6}))?(\-)?(\d){1,4}?(\-)?(\d){7,8}(\-)?(\d){1,4}?$/,
	//判断字符串是否符合电话号码格式
	//座机号码，格式：010-12345678、020-1234567、0755-1234567、0755-12345678、1234567、12345678
    TelIsTelephone: /^(0[0-9]{2,3}\-)?([2-9][0-9]{6,7})+(\-[0-9]{1,4})?$/,
	//判断字符串是否符合任意电话号码格式
	//(+86|86)1100000000
    TelIsMobileAny: /^(\+([0-9]{1,6})|([0-9]{1,6}))?(11|12|13|14|15|16|17|18|19)\d{9}$/,
    //判断字符串是否符合电话号码格式
    //手机号码·中国移动【134 135 136 137 138 139 147 150 151 152 157 158 159 182 187 188】
    TelIsChinaMobile: /(^134|^135|^136|^137|^138|^139|^147|^150|^151|^152|^157|^158|^159|^182|^187|^188)[0-9]{8}$/,
    //判断字符串是否符合电话号码格式
    //手机号码·中国联通【130 131 132 145 155 156 185 186】
    TelIsChinaUnicom: /(^130|^131|^132|^145|^155|^156|^185|^186)[0-9]{8}$/,
    //判断字符串是否符合电话号码格式
    //手机号码·中国电信 【133 153 180 189】
    TelIsChinaTelecom: /(^133|^153|^180|^189)[0-9]{8}$/,
    /*----------------------------------------------------------
    ----    IP 地址
    ----------------------------------------------------------*/
    //判断字符串是否为正确的IP地址格式
    IsIP: /^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$/,
    //判断字符串是否为正确的IP地址格式
    IsIPs: /^(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5]).(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5]).(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5]).(0|[1-9]\d?|[0-1]\d{2}|2[0-4]\d|25[0-5])$/,
    //判断字符串是否为正确的IP地址格式
    IsIPSect: /^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){2}((2[0-4]\d|25[0-5]|[01]?\d\d?|\*)\.)(2[0-4]\d|25[0-5]|[01]?\d\d?|\*)$/,
    /*----------------------------------------------------------
    ----    常规验证
    ----------------------------------------------------------*/
    //判断字符串是否符合大陆身份证规范
    IdCard: /(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3})|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])(\d{4}|\d{3}[x]))$/,
    //判断字符串是否为正确的URL地址格式
    IsURL: /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/,
    //判断字符串是否符合邮政编码格式
    IsPost: /^[1-9]\d{5}$/,
    //判断字符串是否符合安全标准
    UnSafe: /^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/,    
    //判断字符串是否为百分比格式
    IsPer: /^(?:[1-9][0-9]?|100)(?:\.[0-9]{1,2})?$/,
    /*----------------------------------------------------------
    ----    图片、日期、密码强度
    ----------------------------------------------------------*/
    IsImage: function (string) {
        var filename = string.replace(/.*(\/|\\)/, ""), fileExt = (/[.]/.exec(filename)) ? /[^.]+$/.exec(filename.toLowerCase()) : '';
        if ((fileExt !== 'jpg') && (fileExt !== 'gif') && (fileExt !== 'jpeg') && (fileExt !== 'png') && (fileExt !== 'bmp')) {
            return false;
        }
        return true;
    },
    IsDate: function (date, format) {
        format = format || 'yyyy-MM-dd HH:mm';
        var input = date,
        i,
        o = {},
        d = new Date();
        f1 = format.split(/[^a-z]+/gi),
        f2 = input.split(/\D+/g),
        f3 = format.split(/[a-z]+/gi),
        f4 = input.split(/\d+/g),
        len = f1.length,
        len1 = f3.length,
        reVal = false,
        s = function (s1, s2, s3, s4, s5) {
            s4 = s4 || 60, s5 = s5 || 2;
            var reVal = s3;
            if (s1 != undefined && s1 != '' || !isNaN(s1)) {
                reVal = s1 * 1;
            }
            if (s2 != undefined && s2 != '' && !isNaN(s2)) {
                reVal = s2 * 1;
            }
            return (reVal == s1 && s1.length != s5 || reVal > s4) ? -10000 : reVal;
        };
        if (len != f2.length || len1 != f4.length) {
            return false;
        }
        for (i = 0; i < len1; i += 1) {
            if (f3[i] != f4[i]) {
                return false;
            }
        }
        for (i = 0; i < len; i += 1) {
            o[f1[i]] = f2[i];
        }
        o.yyyy = s(o.yyyy, o.yy, d.getFullYear(), 9999, 4);
        o.MM = s(o.MM, o.M, d.getMonth() + 1, 12);
        o.dd = s(o.dd, o.d, d.getDate(), 31);
        o.hh = s(o.hh, o.h, d.getHours(), 24);
        o.mm = s(o.mm, o.m, d.getMinutes());
        o.ss = s(o.ss, o.s, d.getSeconds());
        o.ms = s(o.ms, o.ms, d.getMilliseconds(), 999, 3);
        if (o.yyyy + o.MM + o.dd + o.hh + o.mm + o.ss + o.ms < 0) {
            return false;
        }
        if (o.yyyy < 100) {
            o.yyyy += (o.yyyy > 30 ? 1900 : 2000);
        }
        d = new Date(o.yyyy, o.MM - 1, o.dd, o.hh, o.mm, o.ss, o.ms);
        reVal = d.getFullYear() == o.yyyy && d.getMonth() + 1 == o.MM && d.getDate() == o.dd && d.getHours() == o.hh && d.getMinutes() == o.mm && d.getSeconds() == o.ss && d.getMilliseconds() == o.ms;
        return reVal ? d : reVal;
    },
    CheckLevel: function (item, level) {
        var n = this.GetLevel(item), percent = [0, 22, 50, 75, 100], lvlZone = $('#' + level);
        lvlZone.css('backgroundPosition', 'left ' + percent[n] + '%');
    },
    GetLevel: function (item) {
        var v = item.value, l = v.length, min = 6, level = 0;
        if (l < min) {
            if (l > 0) {
                level = 1;
            }
        }
        else {
            if (/^(\d{6,9}|[a-z]{6,9}|[A-Z]{6,9})$/.test(v)) {
                level = 1;
            }
            else {
                if (/^[^a-z\d]{6,8}$/i.test(v) || !/^(\d{6,9}|[a-z]{6,9}|[A-Z]{6,9})$/.test(v)) {
                    level = 2;
                }
            }
            if (!/^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/.test(v)) {
                level = l < 10 ? 3 : 4;
            }
        }
        return level;
    }
}
